Conversation
rescript
@rescript/darwin-arm64
@rescript/darwin-x64
@rescript/linux-arm64
@rescript/linux-x64
@rescript/runtime
@rescript/win32-x64
commit: |
Split bsc module system flags for stdout compilationProblemWhen (* compiler/core/lam_compile_main.ml:295 - old code *)
if Js_packages_info.is_empty package_info && !Js_config.js_stdout then
Js_dump_program.dump_deps_program ~output_prefix Commonjs (* <- hardcoded! *)This meant stdout output was always Commonjs, regardless of project configuration. Since the new SolutionSplit Before (coupled): -bs-package-output esmodule:lib/es6:.mjs
# Format: module_system:path:suffix (all three or none)After (decoupled): -bs-module-system esmodule # Controls import/export syntax
-bs-suffix .mjs # Controls import path extensions
-bs-package-output lib/es6 # Output directory (optional)ImplementationNew compiler state ( let default_module_system = ref Ext_module_system.Commonjs
let default_suffix = ref Literals.suffix_jsNew flags ( ("-bs-module-system", string_call set_module_system, "Set module system: commonjs, esmodule, es6-global");
("-bs-suffix", string_call set_suffix, "Set import file suffix: .js, .mjs, .cjs");Stdout output now uses configured values ( if Js_packages_info.is_empty package_info && !Js_config.js_stdout then
(* Use configured module system instead of hardcoded Commonjs *)
Js_dump_program.dump_deps_program ~output_prefix !Js_config.default_module_systemImport path generation uses configured suffix ( (* For Package_script mode (stdout), use configured suffix *)
let js_file = Ext_namespace.js_name_of_modulename dep_module_id.id.name case !Js_config.default_suffixCritical exception: Runtime package imports ( (* Runtime package is pre-compiled and always uses .js suffix *)
let js_file = Ext_namespace.js_name_of_modulename dep_module_id.id.name Upper Literals.suffix_jsBuild System UpdatesRewatch ( // Old format:
"-bs-package-output", "esmodule:lib/es6:.mjs"
// New format:
"-bs-module-system", "esmodule",
"-bs-suffix", ".mjs",
"-bs-package-output", "lib/es6"Legacy bsb ( (* Old: single compound flag *)
"-bs-package-output esmodule:lib/es6:.mjs"
(* New: three separate flags *)
"-bs-module-system esmodule -bs-suffix .mjs -bs-package-output lib/es6"Backward CompatibilityThe
This allows gradual migration, though since these are internal flags (users don't call Result
$ bsc -bs-module-system esmodule -bs-suffix .mjs file.ast
// Generated by ReScript, PLEASE EDIT WITH CARE
import * as MyDep from "./MyDep.mjs";
import * as Belt_Array from "@rescript/runtime/lib/es6/Belt_Array.js";
export { ... }Notice:
This enables //cc @cristianoc , @zth |
Use case: I want to compile a single ReScript file and run it immediately.
With this PR I could do
rescript compile-file MyFile.res | bun -and bun automatically runs it.(Would not be a stretch to create a Bun plugin and just be able to run
bun run MyFile.resif plugin is configured)Example bun plugin:
wire up in
bunfig.toml:Afterwards you can run
bun run MyFile.res